/**
 * File: Tool.java
 * User: z3y2
 * Date: 2010-12-7
 * Time: 上午09:02:07
 * Copyright: (c) 2010 All Rights Reserved
 */
package com.mypack.util;

import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.UUID;


/**
 * 系统工具箱
 * @author z3y2
 */
public final class Tool {

	
	/**
	 * 获取系统当前时间
	 * @return yyyy-MM-dd HH:mm:ss 当前时间的字符串形式
	 */
	public static String now() {
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		return format.format(Calendar.getInstance().getTime());
	}
	
	/**
	 * @return uuid 产生的惟一Key
	 */
	public static String uuid() {
		return UUID.randomUUID().toString();
	}
	
	public static void main(String[] args) {
		System.out.println(getClasspath());
		System.out.println(Tool.class.getResource("/"));
		System.out.println(Tool.class.getClassLoader().getResource(""));
	}
	
	/**
	 * 得到类路径下的文件的绝对路径
	 * @param ralativePath 相对于类路径的相对路径
	 * @return 绝对路径
	 */
	public static String getAbsolutePath(String ralativePath) {
		String path = Tool.class.getClassLoader().getResource(ralativePath).toString();
		return path.substring(6);
	}
	
	/**
	 * 得到类路径目录(classpath directory)
	 * @return
	 */
	public static File getClasspath() {
		return new File(getAbsolutePath(""));
	}
	
	/**
	 * 得到类路径目录(classpath directory)的上一级目录路径
	 * @return
	 */
	public static String getClasspathParent() {
		return new File(getAbsolutePath("")).getParent();
	}
	
	/**
	 * 得到类路径下面某个文件的输入流
	 * @param ralativePath 相对于类路径的相对路径
	 * @return 输入流
	 * @throws FileNotFoundException 文件未找到抛出异常
	 */
	public static InputStream getInputStream(String ralativePath) throws FileNotFoundException {
		return new FileInputStream(new File(getAbsolutePath(ralativePath)));
	}
	
	/**
	 * 释放资源
	 * @param resource 系统中的某种资源, 比如说文件流, 网络资源等
	 */
	public static void release(Closeable resource) {
		if (resource != null) {
			try {
				resource.close();
			} catch (IOException e) {
				throw new IllegalStateException("realse the resource[" + resource + "] failed!");
			}
			resource = null;
		}
	}
	
}
